import {
  ethers
} from 'ethers'
// 导入 onboarding 插件
import MetaMaskOnboarding from '@metamask/onboarding'
// 导入 element ui 的 Message 消息提示组件
import {
  Message
} from 'element-ui'

// 验证是否支持 metamask
export const isMetaMaskInstalled = () => {
  const { ethereum } = window
  return Boolean(ethereum && ethereum.isMetaMask)
}

/**
 * @method connectMetaMask
 * @return [description]
 */
export async function connectMetaMask() {
  if (!isMetaMaskInstalled()) {
    // 判断是否安装MetaMask扩展工具
    const forwarderOrigin = window.location.origin
    const onboarding = new MetaMaskOnboarding({
      forwarderOrigin
    })
    onboarding.startOnboarding()
    return
  }

  const provider = new ethers.providers.Web3Provider(window.ethereum)
  try {
    // 请求链接小狐狸钱包
    const accounts = await window.ethereum.request({
      method: 'eth_requestAccounts'
    });
    console.log('accounts', accounts)
    // 获取链网络 id
    const { chainId } = await provider.getNetwork()
    // 获取链接账号
    const account = accounts[0];
    // 监听链的变化，做出页面刷星
    window.ethereum.on('chainChanged', () => {
      window.location.reload()
    })
    // 当账号切换的时候，重新刷新页面
    window.ethereum.on('accountsChanged', () => {
      window.location.reload()
    })
    // 监听消息变化
    window.ethereum.on('message', (message: any) => {
      console.log('message', message)
    })
    // 监听断开钱包链接，移除钱包类型，以及钱包类型认证，同时刷新页面
    window.ethereum.on('disconnect', () => {
      localStorage.removeItem('walletType')
      localStorage.removeItem('walletTypeVerify')
      window.location.reload()
    })
    // 最后将账号，链接，链接ID 暴露出去
    return {
      account,
      provider,
      chainId,
    }
  } catch (error: any) {
    console.log(error)
    Message.error(error)
    return false
  }
}
